from django import forms
from .models import Student


class StudentForm(forms.ModelForm):
    """学生表单，基于Student模型自动生成"""

    class Meta:
        #model = Student：指定这个表单是基于 Student 模型生成的。
        model = Student
        #fields = ['name', 'student_id', 'age']：表示只显示这三个字段。
        fields = ['name', 'student_id', 'age']  # 指定包含的字段

        #labels 和 widgets：用于自定义表单字段的标签和 HTML 属性，使页面更友好、美观。
        labels = {
            'name': '学生姓名',
            'student_id': '学号',
            'age': '年龄',
        }
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': '请输入学生姓名'
            }),
            'student_id': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': '请输入学号'
            }),
            'age': forms.NumberInput(attrs={
                'class': 'form-control',
                'placeholder': '请输入年龄',
                'min': '1',
                'max': '100'
            }),
        }

    def clean_student_id(self):
        """自定义学号验证"""
        student_id = self.cleaned_data['student_id']

        # 检查学号是否已存在（排除当前编辑的实例）
        if self.instance.pk:  # 编辑模式
            if Student.objects.exclude(pk=self.instance.pk).filter(student_id=student_id).exists():
                raise forms.ValidationError('该学号已存在！')
        else:  # 添加模式
            if Student.objects.filter(student_id=student_id).exists():
                raise forms.ValidationError('该学号已存在！')

        return student_id

    def clean_age(self):
        """自定义年龄验证"""
        age = self.cleaned_data['age']
        if age < 1 or age > 100:
            raise forms.ValidationError('年龄必须在1-100之间！')
        return age